'''
给定一个按照升序排列的整数数组 nums，和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

如果数组中不存在目标值 target，返回 [-1, -1]。

进阶：

你可以设计并实现时间复杂度为 O(log n) 的算法解决此问题吗？
 

示例 1：

输入：nums = [5,7,7,8,8,10], target = 8
输出：[3,4]

来源：力扣（LeetCode）
链接：https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
'''
class Solution(object):
    def searchRange(self, nums, target):
        """
        :type nums: List[int]
        :type target: int
        :rtype: List[int]
        """
        if len(nums) == 0:
            return [-1,-1]
        head,tail = 0,len(nums)
        hishead,histail = 0,0
        while head<=tail:
            tmp = (head+tail)//2
            if nums[tmp] == target or hishead==head and histail==tail:
                break
            if nums[tmp] < target:
                head = tmp
            if nums[tmp] > target:
                tail = tmp
            hishead,histail = head,tail

        new_nums = nums[head:tail]
        try:
            res1 = head + new_nums.index(target)
        except:
            res1 = -1
        try:
            res2 = tail - 1 - new_nums[::-1].index(target)
        except:
            res2=-1
        return [res1,res2]

nums = [1,2,3]
target = 3
Solution().searchRange(nums,target)